#ifndef CAR_H
#define CAR_H

#include <string>  
using namespace std;
  
// 定义轮胎结构体  
struct Tire {  
    std::string type;  // 轮胎类型  
    float size;        // 轮胎尺寸（mm）  
};  
  
// 定义底盘结构体  
struct Chassis {  
    std::string id;                // 底盘编号  
    std::string model;             // 型号  
    float wheelbase;               // 轴距（mm）  
    float track;                   // 轮距（mm）  
    float minGroundClearance;      // 最小离地间隙（mm）  
    float minTurningRadius;        // 最小转弯半径（m）  
    std::string driveForm;         // 驱动形式  
    float maxRange;                // 最大行程（KM）  
    Tire tires[4];                 // 轮胎信息（4个）  
};  
  
  
struct AGXKit {  
    std::string model;  
    int AI;  
    int CUDACores;  
    int TensorCores;  
    int memory;  
    int storage;  
};  
  
struct Camera {  
    std::string model;  
    std::string cameraType;  
    int RGBResolutionWidth;  
    int RGBResolutionHeight;  
    int RGBFrameRate;  
    int FOVWidth;  
    int FOVHeight;  
    int depthFrameRate;  
};  
  

// 定义激光雷达结构体  
struct Lidar {  
    std::string model;  
    int channels;  
    float range;  
    int powerConsumption;  
};  
  
// 定义陀螺仪结构体  
struct Gyroscope {  
    std::string model;  
    std::string manufacturer;  
};  
  
// 定义显示屏结构体  
struct Display {  
    float size;  
    std::string model;  
};  
  
// 定义电池模块结构体  
struct Battery {  
    std::string parameters;  // 参数，如"24V/15Ah"  
    float outputVoltage;  
    float chargeTimeHours;  
};  
  
  
// 定义智能小车类  
class SmartCar {  
private:  
    std::string carId;             // 智能小车编号  
    // std::string sdudentId;          // 学生学号
    Chassis chassis;               // 底盘信息  
    AGXKit agxKit;                 // AGX套件信息  
    Camera camera;                 // 双目摄像头信息  
    Lidar lidar;  
    Gyroscope gyroscope;  
    Display display;  
    Battery battery; 
    // 可以添加更多组件作为类的成员  
public:
    // 构造函数，只接受小车编号和底盘编号作为输入  
    SmartCar(const std::string& carId, const std::string& chassisId);
    SmartCar();
    std::string getCarId() const;
    std::string getChassisId() const;
    // bool display(std::string fileName);
};  

class Student {  
private:  
    std::string studentId;  
    std::string name;  
public:
    Student(const std::string ID, const std::string studentName, std::string carId);

}; 
  


#endif